四天掌握Scala(2)

您所在的位置:网站首页 take breaks用法 四天掌握Scala(2)

四天掌握Scala(2)

#四天掌握Scala(2)| 来源: 网络整理| 查看: 265

四天掌握Scala(2)1.5 循环

在 Scala 中,可以使用 for 和 while,但一般推荐使用 for 表达式,因为 for 表达式语法更简洁。

1.5.1 for 表达式

语法格式如下:

for(i val nums = 1.to(10) nums: scala.collection.immutable.Range.Inclusive = Range 1 to 10 scala> for(i for(i for(i :paste // Entering paste mode (ctrl-D to finish) for(i breakable{ | for (i = 50) break() | else println(i) | } | } 1.6.2 实现 continue

用法: continue 的实现与 break 类似,但有一点不同:实现 break 是用 breakable{} 将整个 for 表达式包起来,而实现 continue 是用 breakable{} 将 for 表达式的循环体包含起来就可以了。

示例: 打印 1-100 的数字,使用 for 表达式来遍历,如果数字能整除10,不打印。

// 导入scala.util.control包下的Break scala> import scala.util.control.Breaks._ import scala.util.control.Breaks._ scala> for(i def add(a:Int, b:Int) = a + b add: (a: Int, b: Int)Int scala> add(5,6) res4: Int = 111.7.2 返回值类型推断

Scala 定义方法可以省略返回值,由 Scala 自动推断返回值类型。这样方法定义后更加简洁。定义递归方法,不能省略返回值类型。因为,递归调用是一层一层向内走,当前那一层无法推断返回类型,会导致一系列问题。

示例: 定义递归方法(求阶乘),比如求 10 的阶乘,10 * 9 * 8 * 7 * 6 * ... * 1

参考代码

image.png

1.8 方法参数

Scala 中的方法参数,使用比较灵活。它支持以下几种类型的参数:默认参数、带名参数、变长参数。

1.8.1 默认参数

在定义方法时可以给参数定义一个默认值。

示例:

定义一个计算两个值相加的方法,这两个值默认为 0。调用该方法,不传任何参数。

参考代码

// x,y带有默认值为0 scala> def add(x:Int = 0, y:Int = 0) = x + y add: (x: Int, y: Int)Int scala> add() res5: Int = 01.8.2 带名参数

在调用方法时,可以指定参数的名称来进行调用。

示例:

定义一个计算两个值相加的方法,这两个值默认为 0。调用该方法,只设置第一个参数的值。

参考代码:

scala> def add(x:Int = 0, y:Int = 0) = x + y add: (x: Int, y: Int)Int scala> add(1) res6: Int = 11.8.3 变长参数

如果方法的参数是不固定的,可以定义一个方法的参数是变长参数。语法格式如下:

def 方法名(参数名:参数类型*):返回值类型 = { 方法体 }

在参数类型后面加一个 * 号,表示参数可以是0个或者多个。

示例:

定义一个计算若干个值相加的方法。调用方法,传入以下数据:1,2,3,4,5。

参考代码:

scala> def add(num:Int*) = num.sum add: (num: Int*)Int scala> add(1,2,3,4,5) res7: Int = 15

其他:Scala 允许指定最后一个参数是可变长度的,或者唯一一个参数。变长参数,在函数体内本质上是一个 Array 实例,也就是除了例子里面的 sum 外,我们也可以用 for 循环迭代它,如:

scala> def add(x:Int*): Int={ | var result=0 | for(i add(1,2,3) res8: Int = 6

虽然它本质上是一个 Array,但是你不可以将 Array 对象传递给它,如果要传递需要传递如 array:_* 表明将每个元素传递给它,而不是整个数组对象。如:

add(ar:_*)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3